package com.techstar.ats.status;

import java.util.EnumSet;
import java.util.Set;

import com.techstar.ats.type.Enumerated;

public interface StatusEnumerated extends Enumerated {

	int ordinal();

	default int value() {
		return 1 << this.ordinal();
	}

	default String trueLiteral() {
		return Boolean.TRUE.toString();
	}

	default String falseLiteral() {
		return Boolean.FALSE.toString();
	}

	static <E extends Enum<E> & Enumerated> Set<E> valueOf(Class<E> klass, int mask) {
		Set<E> vals = EnumSet.noneOf(klass);

		for(E val : klass.getEnumConstants()) {
			if(0 != (val.value() & mask)) {
				vals.add(val);
			}
		}

		return vals;
	}
}
